package com.jacob.androidframe.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.slf4j.LoggerFactory;

import android.graphics.Paint;
import android.view.View;

public class UtilCompatibility
{

	/**
	 * 禁用某个View对象的硬件加速。
	 * 在使用硬件加速会导致显示异常时，调用此方法。
	 * 
	 * 目前已知的BUG有：
	 * 1. 在ICS中，ImageView对象使用硬件加速会导致无法正确显示虚线。BUG连接：https://code.google.com/p/android/issues/detail?id=29944。
	 * 
	 */
	public static void disableHardwareAcceleration(View pV)
	{
		if (pV != null) {
			try {
				Class<? extends View> _Clazz = pV.getClass();
				Method _SetLayerTypeMethod = _Clazz.getMethod("setLayerType", int.class, Paint.class);
				Field _LayerTypeSoftwareField = _Clazz.getField("LAYER_TYPE_SOFTWARE");
				_SetLayerTypeMethod.invoke(pV, _LayerTypeSoftwareField.get(pV), null);
			} catch (Exception e) {
				LoggerFactory.getLogger(UtilCompatibility.class).error("Disable {}'s Hardware Acceleration Error", pV, e);
			}
		}
	}

}
